#include "Interfaz.h"
#include "Extranjero.h"
#include "Nacional.h"

#ifndef __linux__
#define COMMAND "cls" //Limpia la pantalla en windows
#else
 #define COMMAND "clear" //Limpia la pantalla en linux
#endif

#define clean() system( COMMAND )


Interfaz::Interfaz()
{
	uni = NULL;
}
Interfaz::~Interfaz()
{
	delete uni;
}

int Interfaz::compruebaInt(char *str)
{
    while(!isdigit(str[0]))
    {
        cout<<"No se ha introducido un numero\n";
        cout<<"Vuevla a introducirlo por favor\n\n";
        cout<<"-> ";
        cin>>str;
    }
    return atoi(str);
}


void Interfaz::registrarEscuelas()
{
	clean();
	char nom[150];
	cout<<"Escriba el nombre de la escuela: ";
	cin.ignore();
	cin.getline(nom,150);
	if(uni->getLista()->buscar(nom)!=NULL)
		cout<<"Ya existe una escuela con ese nombre"<<endl;

	else
	{
	    Escuela* esc = new Escuela(nom);
	    uni->getLista()->insertarPrimero(esc);
	    cout<<"Se ha creado la Escuela de "<<nom<<endl;
	}
	cout<<"Presiona enter para continuar...";
	//cin.ignore();
	cin.get();

}
void Interfaz::mostrarEscuelas()
{
	clean();
	cout<<"\n\n";
	cout<<"\t"<<uni->getNombre()<<endl<<endl;
	//uni->getLista()->mostrarLista();
	cout<<uni->getLista()->toString();
	cout<<"Presiona enter para continuar...";
	cin.ignore();
	cin.get();
}
void Interfaz::modificarUniversidad()
{
	char check[1];
	cout<<"Presione 1 para modificar los datos de la universidad y otro para salir: ";
	cin>>check;
	if(compruebaInt(check) == 1)
	{
		string telefono;
		char direccion[300];
		cout<<"\n\n";
		cout<<"\t Ingrese los datos de la universidad\n";
		cout<<"\t\tDireccion: ";
		cin.ignore();
		cin.getline(direccion, 300);
		uni->setDireccion(direccion);
		cout<<"\t\t Telefono: ";
		cin>>telefono;
		uni->setNumero(telefono);
		cout<<"Presiona enter para continuar";
			cin.ignore();
			cin.get();
	}
}

void Interfaz::ingresarDatos()
{
	string telefono;
	char nombre[150], direccion[300];
	cout<<"\n\n";
	cout<<"\t Ingrese los datos de la universidad\n";
	cout<<"\t\t Nombre: ";
	cin.getline(nombre, 150);
	cout<<"\t\tDireccion: ";
	cin.getline(direccion, 300);
	cout<<"\t\t Telefono: ";
	cin>>telefono;

	uni = new Universidad(nombre, telefono, direccion);
}

void Interfaz::menu()
{
	char check[1];
	int opcion = 0;
	while(opcion != 4)
	{

		clean();
		cout<<"\n\t\t\t"<<uni->getNombre()<<endl<<endl;
		cout<<"[1] Para ingresar al menu de Escuelas\n"<<endl;
		cout<<"[2] Para ver los datos de la Universidad y modificarlos\n"<<endl;
		cout<<"[3] Para ver las escuelas con sus cursos y profesores\n"<<endl;
		cout<<"[4] Para Salir\n"<<endl;
		cout<<"\n\n-> ";
		cin>>check;
		opcion = compruebaInt(check);

		switch(opcion)
		{
        case 1:
             menuEscuelas();
             break;

        case 2:
            MostrarUniversidad();
            modificarUniversidad();
			break;

        case 3:
              EscuelacursosyProfesor();
              break;

		case 4:
			cout<<"\nSaliendo...\n";
			break;

		default:
			cout<<"No escogio ninguna opcion, vuelva a escoger\n";
			cout<<"Presiona enter para continuar...\n";
			cin.ignore();
			cin.get();
			break;
		}
	}
}

void Interfaz::MostrarUniversidad()
{
    clean();
	cout<<"\t------Datos de la Universidad------"<<endl<<endl;
	cout<<"Nombre: "<<uni->getNombre()<<endl;
	cout<<"Numero: "<<uni->getNumero()<<endl;
	cout<<"Direccion: "<<uni->getDireccion()<<endl<<endl;

}

void Interfaz::registrarCurso()
{
	clean();
	char nom[150],nom2[150],sigl[150];
	int credi;
    Escuela *esc;
    cout<<"Digite el nombre de la escuela: ";
    cin.ignore();
    cin.getline(nom2,150);
	esc=uni->getLista()->buscar(nom2);
    if(esc==NULL)
        cout<<"No hay ninguna escuela con el nombre "<<nom2<<endl;
    else
    {
    	cout<<"Escriba el nombre del curso: ";
    	//cin.ignore();
    	cin.getline(nom,150);
    	cout<<"Escriba las siglas del curso: ";
    	//cin.ignore();
    	cin.getline(sigl,150);
    	cout<<"Escriba la cantidad de creditos que vale el curso: ";
    	cin>>credi;
    	Curso *c1;
		c1=uni->BuscarCursoPorCodigo(sigl);
    	if(c1==NULL)
    	{
    	    Curso *curso=new Curso(nom,sigl,credi);
    	    esc->getLista()->insertarPrimero(curso);
            cout<<"Curso "<<nom<<" abierto con exito!"<<endl;

        }
        else
        {
            cout<<"Ya existe un curso con ese codigo el cual es: ";
            cout<<c1->toString()<<endl;
        }
    }
    cout<<"Presiona enter para continuar...\n";
    //cin.ignore();
    cin.get();
}

void Interfaz::modificarCurso()
{
    string sigl;
    char nom[150];
    Curso *c;
    cout<<"Digite las siglas o codigo del curso que desea modificar: "<<endl;
    cin>>sigl;
    c=uni->BuscarCursoPorCodigo(sigl);
    if(c==NULL)
    	cout<<"No existe el curso "<<sigl<<endl;
    else
    {
    	cout<<"El nombre del curso es: "<<c->toString()<<endl;
    	cout<<"Digite el nuevo nombre del curso: "<<endl;
    	cin.ignore();
    	cin.getline(nom, 150);
    	c->setNombre(nom);
    	cout<<"El nombre se ha modificado con exito"<<endl;
    }
    cout<<"Presiona enter para continuar...\n";
    cin.ignore();
    cin.get();

}

void Interfaz::eliminaCurso()
{
    string sigl;
    Escuela *aux;
    cout<<"Digite el codigo del curso que desea eliminar: ";
    cin>>sigl;
    aux=uni->devuelveEscuelaDeCursoEncontrado(sigl);
    if(aux==NULL)
    	cout<<"No se puede borrar el curso "<<sigl<<" porque no existe"<<endl;
    else
    {
        cout<<"El curso "<<sigl<<" pertenece a "<<aux->toString();
        aux->getLista()->eliminar(sigl);
		aux->eliminaCursosDeProfes(sigl);
		aux->eliminaCursosDeEstudiantes(sigl);
        cout<<"Curso "<<sigl<<" eliminado"<<endl;
    }
    cout<<"Presiona enter para continuar...\n";
    cin.ignore();
    cin.get();
}


void Interfaz::mostrarCurso()
{
    string sigl;
    cout<<"Digite el codigo del curso: ";
    cin>>sigl;
    Curso *auxiliar;
    auxiliar=uni->BuscarCursoPorCodigo(sigl);
    if(auxiliar==NULL)
    	cout<<"El curso "<<sigl<<" no existe o fue eliminado"<<endl<<endl;
    else
    	cout<<auxiliar->toString()<<endl<<endl;

    cout<<"Presiona enter para continuar...\n";
    cin.ignore();
    cin.get();
}


void Interfaz::mostrarCursoDeEscuela()
{
    char nom[150];
    cout<<"Digite el nombre de la escuela: ";
    cin.ignore();
    cin.getline(nom,150);
    cout<<uni->toStringCursosDeUnaEscuela(nom);
    cout<<endl<<"Presiona enter para continuar...\n";
    //cin.ignore();
    cin.get();
}

void Interfaz::menuEscuelas()
{
	char check[1];
    int opcion2 =0;
    while(opcion2!=7)
    {
    	clean();
        cout<<"\n\t\t\t"<<uni->getNombre()<<endl<<endl;
        cout<<"--------------------MENU DE ESCUELAS--------------------\n\n"<<endl;
        cout<<"[1] Para ingresar una Escuela\n"<<endl;
        cout<<"[2] Para ver la lista de Escuelas\n"<<endl;
        cout<<"[3] Para entrar el menu de Cursos\n"<<endl;
        cout<<"[4] para ver los cursos con sus profesores de una escuela\n"<<endl;
        cout<<"[5] para entrar al menu de profesores\n"<<endl;
        cout<<"[6] para entrar al menu de estudiantes\n"<<endl;
        cout<<"[7] Para regresar al menu anterior\n"<<endl;
        cout<<"\n-> "<<endl;
        cin>>check;
        opcion2 = compruebaInt(check);

        switch(opcion2)
        {
        case 1:
        	registrarEscuelas();
            break;

        case 2:
        	mostrarEscuelas();
        	break;

        case 3:
        	menuCursos();
        	break;


        case 4:
              mostrarCursosProfes();
              break;

        case 5:
              menuProfesores();
              break;

        case 6:
              menuEstudiantes();
              break;

        case 7:
        	cout<<"Regresando al menu anterior...";
            break;

        default:
        	cout<<"No escogio ninguna opcion, vuelva a escoger\n";
            cout<<"Presiona enter para continuar...\n";
			cin.ignore();
			cin.get();
			break;
       }
    }
}



void Interfaz::menuCursos()
{
    char check[1];
    int opcion3=0;
    while(opcion3!=7)
    {
    	clean();
        cout<<"\n\t\t\t"<<uni->getNombre()<<endl<<endl;
        cout<<"--------------------MENU DE CURSOS--------------------\n\n"<<endl;
        cout<<"[1] Para ingresar un Curso\n"<<endl;
        cout<<"[2] Para mostrar un Curso\n"<<endl;
        cout<<"[3] Para ver la lista de Cursos de una Escuela\n"<<endl;
        cout<<"[4] Para ver la lista total de Cursos de la Universidad\n"<<endl;
        cout<<"[5] Para modificar un Curso\n"<<endl;
        cout<<"[6] Para eliminar un Curso\n"<<endl;
        cout<<"[7] Para regresar al menu anterior\n"<<endl;
        cout<<"\n-> "<<endl;
        cin>>check;
        opcion3 = compruebaInt(check);
        switch(opcion3)
        {
        case 1:
        	registrarCurso();
        	break;

        case 2:
        	mostrarCurso();
            break;

        case 3:
            mostrarCursoDeEscuela();
            break;

        case 4:
        	clean();
            cout<<uni->toStringTodosLosCursos();
            cout<<"Presiona enter para continuar...\n";
            cin.ignore();
            cin.get();
            break;

        case 5:
            modificarCurso();
            break;

        case 6:
        	eliminaCurso();
            break;

         case 7:
            cout<<"Regresando al menu anterior...";
            break;

         default:
        	 cout<<"No escogio ninguna opcion, vuelva a escoger\n";
             cout<<"Presiona enter para continuar...\n";
             cin.ignore();
             cin.get();
             break;
        }
    }
}



void Interfaz::ingresaProfesor()
{
    clean();
	char nom[150],nom2[150];
	string ap1, ap2, cedula1;
    Escuela *esc;
    cout<<"Digite el nombre de la escuela que contratara al profesor: ";
    cin.ignore();
    cin.getline(nom2,150);
	esc=uni->getLista()->buscar(nom2);
    if(esc==NULL)
        cout<<"No hay ninguna escuela con el nombre "<<nom2<<endl;
    else
    {
    	cout<<"Digite el nombre del profesor: ";
    	//cin.ignore();
    	cin.getline(nom,150);
    	cout<<"Digite el primer apellido del profersor: ";
    	//cin.ignore();
    	cin>>ap1;

    	cout<<"Digite el segundo apellido del profesor: ";
    	cin>>ap2;

    	cout<<"Digite el numero de cedula o identificacion del profesor: ";
    	cin>>cedula1;
		cin.ignore();



    	Profesor *p1;
    	p1=uni->BuscarProfePorCedula(cedula1);
    	if(p1==NULL)
    	{
    	    Profesor *profe=new Profesor(cedula1,nom,ap1,ap2);
    	    esc->getProfesores()->insertarPrimero(profe);
            cout<<"Profesor "<<nom<<" contratado!"<<endl;


        }
        else
        {
            cout<<"Ya existe un profesor con esa identificacion el cual es: ";
            cout<<p1->toString()<<endl;

        }

    }
    cout<<"Presiona enter para continuar...\n";
    //cin.ignore();
   cin.get();


}


void Interfaz::modificarProfesor()
{
    clean();
     string cedula1,ap1,ap2;
    char nom[150];
    Profesor *c;
    cout<<"Digite el numero de cedula o identificacion del profesor que desea modificar: "<<endl;
    cin>>cedula1;
    c=uni->BuscarProfePorCedula(cedula1);
    if(c==NULL)
    	cout<<"ese profesor no ha sido contratado "<<cedula1<<endl;
    else
    {
    	cout<<"El profesor es: "<<c->toString()<<endl;
    	cout<<"Digite el nuevo nombre del profesor: "<<endl;
    	cin.ignore();
    	cin.getline(nom, 150);
    	c->setNombre(nom);
    	cout<<"Digite el primer apellido  "<<endl;
    	cin>>ap1;
    	c->setApellido1(ap1);
    	cout<<"Digite el segundo apellido "<<endl;
    	cin>>ap2;
    	c->setApellido2(ap2);
    	cout<<"El nombre se ha modificado con exito"<<endl;
    }
    cout<<"Presiona enter para continuar...\n";
    cin.ignore();
    cin.get();
}

void Interfaz::mostrarProfesor()
{
    clean();
    string cedula1;
    cout<<"Digite la cedula o identificacion del profesor: ";
    cin>>cedula1;
    Profesor *auxiliar;
    auxiliar=uni->BuscarProfePorCedula(cedula1);
    if(auxiliar==NULL)
    	cout<<"El profesor con la cedula "<<cedula1<<" no ha sido contratado"<<endl<<endl;
    else
    	cout<<auxiliar->toString()<<endl<<endl;

    cout<<"Presiona enter para continuar...\n";
    cin.ignore();
    cin.get();
}

void Interfaz::mostrarProfesDeEscuela()
{
    clean();
    char nom[150];
    cout<<"Digite el nombre de la escuela: ";
    cin.ignore();
    cin.getline(nom,150);
    //uni->getLista()->BuscarEscuelaPorNombre(nom)->getProfesores()->mostrarLista();
	cout<<uni->getLista()->buscar(nom)->getProfesores()->toString();
    cout<<endl<<"Presiona enter para continuar...\n";
    //cin.ignore();
    cin.get();

}


void Interfaz::asignarCursoaProfe()
{
    clean();
    string cedula1,codigo;

    Profesor *p1;
    cout<<"digite la identificacion del profesor: "<<endl;
    cin>>cedula1;
    p1=uni->BuscarProfePorCedula(cedula1);
    if(p1==NULL)
    cout<<"el profesor con la identificacion "<<cedula1<<"no ha sido contratado"<<endl;

    else
    {
        Curso *c1;

        cout<<"digite el codigo del curso que desea asignar "<<endl;
        cin>>codigo;
        c1=uni->BuscarCursoPorCodigo(codigo);
        if(c1==NULL)
        cout<<"el curso con el codigo: "<<codigo<<"no existe"<<endl;

        else
        {
            Curso *c2;
            c2=new Curso(c1->getNombre(),c1->getSigla(),c1->getCreditos());
            p1->asignarCurso(c2);
            cout<<"curso asignado con exito!";
        }

    }
    cin.get();
    cin.get();
}

void Interfaz::desasignarCursoaProfe()
{
    clean();
    string cedula1,codigo;

    Profesor *p1;
    cout<<"digite la identificacion del profesor: "<<endl;
    cin>>cedula1;
    p1=uni->BuscarProfePorCedula(cedula1);
    if(p1==NULL)
    cout<<"el profesor con la identificacion "<<cedula1<<"no ha sido contratado"<<endl;

    else
    {

        cout<<"digite el codigo del curso que desea desasignar "<<endl;
        cin>>codigo;
        if(uni->BuscarCursoPorCodigo(codigo)==NULL)
        cout<<"el curso con el codigo: "<<codigo<<"no existe"<<endl;

        else
        {
			p1->getCursos()->eliminar(codigo);
            cout<<"curso desasignado!";
        }

    }
    cin.get();

}


void Interfaz::mostrarCursosDeProfe()
{
    clean();
    string cedula1;
    cout<<"digite la identificacion del profesor:";
    cin>>cedula1;
    Profesor* p1;
    p1=uni->BuscarProfePorCedula(cedula1);
    if(p1==NULL)
    cout<<"el profesor con esa identifacion no pertenece a la universidad"<<endl;

    else
    {
        Lista<Curso> *c1;
        c1=p1->getCursos();

      if(c1 !=NULL)
      {
       cout<<"los cursos impartidos por el "<<endl;
       cout<<p1->toString()<<endl;
       cout<<"son los siguientes"<<endl<<endl;

       //p1->getCursos()->mostrarLista();
       cout<<p1->getCursos()->toString();
      }

      else
      cout<<"el profesor no imparte ningun curso"<<endl;
    }
    cin.get();
    cin.get();

}


void Interfaz::listaProfesDeUnCurso()
{
    clean();
    string codigo;
    cout<<"digite el codigo del curso"<<endl;
    cin>>codigo;
    Curso *c1;
    c1=uni->BuscarCursoPorCodigo(codigo);
    if(c1==NULL)
    cout<<"no existe dicho curso o fue eliminado"<<endl;
    else
    {
      Lista<Profesor> *lis1;
      lis1=uni->devuelveEscuelaDeCursoEncontrado(codigo)->listaProfesDeUnCurso(codigo);
      if(lis1->getPrimero()==NULL)
      cout<<"no se ha asignado ningun profesor a este curso"<<endl;
      else
      {
          cout<<"el curso es: "<<endl;
          cout<<c1->toString()<<endl;
          cout<<"y los profesores que imparten este curso son los siguientes:"<<endl<<endl;
          //lis1->mostrarLista();
          cout<<lis1->toString();

      }
    }
    cin.get();
    cin.get();
}

void Interfaz::listaCursosConProfe()
{
    clean();
    string cedula1;
    cout<<"digite el numero de cedula o identificacion del profesor "<<endl;
    cin>>cedula1;
    Profesor *p1;
    p1=uni->BuscarProfePorCedula(cedula1);
    if(p1==NULL)
    cout<<"el profesor con la cedula "<<cedula1<<"no pertenece a la universidad"<<endl;
    else
    {
        cout<<p1->toString()<<endl;
        cout<<"imparte los siguientes cursos: "<<endl;
        //p1->getCursos()->mostrarLista();
        cout<<p1->getCursos()->toString();
    }
    cin.get();
}

void Interfaz::EscuelacursosyProfesor()
{
	clean();
	cout<<"\n\n";
	cout<<"\t"<<uni->getNombre()<<endl<<endl;
	cout<<uni->toStringEscuelasCursosProfes();
	cout<<"Presiona enter para continuar...";
	cin.ignore();
	cin.get();

}

void Interfaz::asignarProfeDirector()
{
    clean();
    char nom[150];
    cout<<"digite el nombre de la escuela ";
    cin.ignore();
    cin.getline(nom,150);
    Escuela *esc;
	esc=uni->getLista()->buscar(nom);
    if(esc==NULL)
      cout<<"no existe dicha escuela"<<endl;

    else
    {
        cout<<esc->toString();
        //esc->getProfesores()->mostrarLista();
        esc->getProfesores()->toString();
        cout<<endl<<endl<<endl;
        if(esc->getProfesores()->getPrimero()!=NULL)
       {
        string cedula1;
        cout<<"digite la cedula del profesor que desea va a obtener el cargo de director"<<endl;
        cin>>cedula1;
        if(esc->asignarProfeDirector(cedula1))
        cout<<"profesor asignado como director con exito!"<<endl;

        else
        cout<<"el profesor con la id: "<<cedula1<<"no pertenece a esta escuela"<<endl;


       }
    }
    cin.get();

}
void Interfaz::mostrarCursosProfes()
{
    char nom[150];
    cout<<"digite el nombre de la escuela "<<endl;
    cin.ignore();
    cin.getline(nom,150);
    Escuela *esc;
	esc=uni->getLista()->buscar(nom);
    if(esc !=NULL)
    {
      //esc->mostrarCursosConProfes();
    	cout<<esc->toStringCursosConProfes()<<endl;
    }
    else
    cout<<"no existe una escuela con dicho nombre"<<endl;

    cin.get();
}

void Interfaz::menuProfesores()
{
    char check[1];
    int opcion=0;
    while(opcion!=10)
    {
    	clean();
        cout<<"\n\t\t\t"<<uni->getNombre()<<endl<<endl;
        cout<<"--------------------MENU DE PROFESORES--------------------\n\n"<<endl;
        cout<<"[1] Para ingresar datos de un profesor\n"<<endl;
        cout<<"[2] Para modificar los datos de un profesor\n"<<endl;
        cout<<"[3] Para mostrar los datos de un profesor\n"<<endl;
        cout<<"[4] Para mostrar la lista de profesores de una escuela\n"<<endl;
        cout<<"[5] Para asignar un profesor a un curso\n"<<endl;
        cout<<"[6] Para desasignar un profesor a un curso\n"<<endl;
        cout<<"[7] Para mostrar la lista de cursos que imparte un profesor\n"<<endl;
        cout<<"[8] Para mostrar la lista de profesores de un curso\n"<<endl;
        cout<<"[9] Para asignar al profesor director\n"<<endl;
        cout<<"[10] para regresar al menu anterior\n"<<endl;
        cout<<"\n-> "<<endl;
        cin>>check;
        opcion = compruebaInt(check);
        switch(opcion)
        {
        case 1:
        	ingresaProfesor();
        	break;

        case 2:
        	modificarProfesor();
            break;

        case 3:
            mostrarProfesor();
            break;

        case 4:
        	mostrarProfesDeEscuela();
            break;

        case 5:
            asignarCursoaProfe();
            break;

        case 6:
        	desasignarCursoaProfe();
            break;

        case 7:
            mostrarCursosDeProfe();
            break;

        case 8:
              listaProfesDeUnCurso();
              break;

        case 9:
             asignarProfeDirector();
             break;

        case 10:
            cout<<"Regresando al menu anterior...";
            break;



       default:
        	 cout<<"No escogio ninguna opcion, vuelva a escoger\n";
             cout<<"Presiona enter para continuar...\n";
             cin.ignore();
             cin.get();
             break;
        }
    }

}


int Interfaz::matriculaEstudiante()
{
    clean();
	char nom[150],nom2[150];
	string ap1, ap2, cedula1,carne,nacio;
	Estudiante *p1 = NULL;
    Escuela *esc;
    cout<<"Digite el nombre de la escuela a la que entrara el estudiante: ";
    cin.ignore();
    cin.getline(nom2,150);
	esc=uni->getLista()->buscar(nom2);
    if(esc==NULL)
    {
        cout<<"No hay ninguna escuela con el nombre "<<nom2<<endl;
        cout<<"Presiona enter para continuar...\n";
          //cin.ignore();
        cin.get();
        return 0;
    }

    while(1)
    {
    	cout<<"Digite el numero de carne del estudiante: ";
       	cin>>carne;
       	p1=uni->buscarEstudianteCedulaOCarne(carne);
       	if(p1 != NULL)
       		cout<<"Ya existe un estudiante con el carne: "<<carne<<endl;
       	else
       		break;
    }
     while(1)
    {

        cout<<"Digite el numero de cedula o identificacion del estudiante: ";
   	    cin>>cedula1;
        p1=uni->buscarEstudianteCedulaOCarne(cedula1);
       	if(p1 != NULL)
       		cout<<"Ya existe un estudiante con la cedula: "<<cedula1<<endl;
       	else
       		break;
    }
    cout<<"Digite el nombre del estudiante: ";
    cin.ignore();
    cin.getline(nom,150);
    cout<<"Digite el primer apellido del estudiante: ";
    //cin.ignore();
    cin>>ap1;

    cout<<"Digite el segundo apellido del estudiante: ";
    cin>>ap2;


  	cout<<"Digite la nacionalidad del estudiante: ";
   	cin>>nacio;
	cin.ignore();

	if(nacio=="costarricense" || nacio=="Costarricense" )
    {
		char check[1];
        int opcion=0;
        bool bec;
        float porcentajebeca;
        while(opcion !=1 && opcion!=2)
        {
          	cout<<"Digite 1 si el estudiante posee beca alguna, de lo contrario digite 2: ";
            cin>>check;
            opcion = compruebaInt(check);
            switch(opcion)
            {
           	case 1:
           		bec=true;
                cout<<"digite el porcentaje de la beca de dicho estudiante: ";
                cin>>porcentajebeca;
                break;
            case 2:
            	bec=false;
                porcentajebeca=0;
                break;
            default:
                cout<<"las opciones posibles solo son 1 y 2 elija entre ellas";
                break;
            }
        }
        p1= new Nacional(nom,ap1,ap2,cedula1,nacio,carne,bec,porcentajebeca);
    }
    else
       	p1=new Extranjero(nom,ap1,ap2,cedula1,nacio,carne);

	esc->getEstudiantes()->insertarPrimero(p1);
    cout<<"Estudiante: "<<nom<<" matriculado!"<<endl;
    cout<<"Presiona enter para continuar...\n";
    cin.ignore();
  	cin.get();
  	return 1;
}


void Interfaz::mostrarEstudiante()
{
    clean();
    string codigo1;
    cout<<"digite el numero de cedula o carne del Estudiante: ";
    cin>>codigo1;
    Estudiante *est;
    est=uni->buscarEstudianteCedulaOCarne(codigo1);
    if(est==NULL)
    {
    	cout<<"el estudiante con esa identificacion no existe "<<endl;
    	cout<<"Presione enter para continuar";
    	cin.ignore();
    	cin.get();
    }
    else
    {
    	cout<<est->toString()<<endl;
    	cout<<"Presione enter para continuar";
    	cin.ignore();
    	cin.get();
    }
}


void Interfaz::asignarCursoAEstudiante()


{
    clean();
    string cedula1,codigo;

    Estudiante *p1;
    cout<<"digite la identificacion del Estudiante: "<<endl;
    cin>>cedula1;
    p1=uni->buscarEstudianteCedulaOCarne(cedula1);
    if(p1==NULL)
    cout<<"el Estudiante con la identificacion "<<cedula1<<"no pertenece a la universidad"<<endl;

    else
    {
        Curso *c1;

        cout<<"digite el codigo del curso que desea matricular "<<endl;
        cin>>codigo;
        c1=uni->BuscarCursoPorCodigo(codigo);
        if(c1==NULL)
        cout<<"el curso con el codigo: "<<codigo<<"no existe"<<endl;

        else
        {
            if(p1->getCursos()->buscar(codigo)==NULL)
            {
                Curso *c2;
                c2=new Curso(c1->getNombre(),c1->getSigla(),c1->getCreditos());
                p1->getCursos()->insertarPrimero(c2);
                cout<<"curso matriculado con exito!";
            }
            else
            cout<<"el estudiante ya ha matriculado este curso ";

        }

    }
    cin.ignore();
    cin.get();
    cin.get();

}


void Interfaz::desasignarCursoAEstudiante()
{
    clean();
    string cedula1,codigo;

    Estudiante *p1;
    cout<<"digite la identificacion del Estudiante: "<<endl;
    cin>>cedula1;
    p1=uni->buscarEstudianteCedulaOCarne(cedula1);
    if(p1==NULL)
    cout<<"el Estudiante con la identificacion "<<cedula1<<"no existe"<<endl;

    else
    {

        cout<<"digite el codigo del curso que desea desasignar "<<endl;
        cin>>codigo;
        if(uni->BuscarCursoPorCodigo(codigo)==NULL)
        cout<<"el curso con el codigo: "<<codigo<<"no existe"<<endl;

        else
        {
            p1->getCursos()->eliminar(codigo);
            cout<<"curso desasignado!";
        }

    }
    cin.ignore();
    cin.get();

}



void Interfaz::matriculaVariosCursos()
{
    clean();
    string cedula1,codigo;

    Estudiante *p1;
    cout<<"digite la identificacion del Estudiante: "<<endl;
    cin>>cedula1;
    p1=uni->buscarEstudianteCedulaOCarne(cedula1);
    if(p1==NULL)
    cout<<"el Estudiante con la identificacion "<<cedula1<<"no pertenece a la universidad"<<endl;

    else
    {
        string opcion="1";
        while(opcion=="1")
        {
            Curso *c1;

            cout<<"digite el codigo del curso que desea matricular "<<endl;
            cin>>codigo;
            c1=uni->BuscarCursoPorCodigo(codigo);
            if(c1==NULL)
            cout<<"el curso con el codigo: "<<codigo<<"no existe"<<endl;

            else
             {
                if(p1->getCursos()->buscar(codigo)==NULL)
                {
                   Curso *c2;
                   c2=new Curso(c1->getNombre(),c1->getSigla(),c1->getCreditos());
                   p1->getCursos()->insertarPrimero(c2);
                   cout<<"curso matriculado con exito!";
                }
               else
                 cout<<"el estudiante ya ha matriculado este curso ";
             }

           cout<<"digite 1 para matricular otro curso o cualquier tecla para salir ";
           cin>>opcion;

        }

    }
    cin.get();
    cin.get();

}


void Interfaz::modificacionMatricula()
{
    char check[1];
    int opcion=0;


    	clean();
        cout<<"\n\t\t\t"<<uni->getNombre()<<endl<<endl;
        cout<<"--------------------Modificacion de matricula--------------------\n\n"<<endl;
        cout<<"[1] Para inclusion de un curso\n"<<endl;
        cout<<"[2] Para exclusion de un curso\n"<<endl;
        cout<<"[3] o cualquier otro para salir\n"<<endl;

        cout<<"\n-> ";
        cin>>check;
        opcion = compruebaInt(check);
        switch(opcion)
        {
        case 1:
        	asignarCursoAEstudiante();
        	break;

        case 2:
        	desasignarCursoAEstudiante();
            break;

       default:
        	 cout<<"saliendo...\n";
             cout<<"Presiona enter para continuar...\n";
             cin.ignore();
             cin.get();
             break;
        }




}


void Interfaz::listaEstudiantesDeUnCurso()
{
    clean();
    string codigo;
    cout<<"digite el codigo del curso"<<endl;
    cin>>codigo;
    Curso *c1;
    c1=uni->BuscarCursoPorCodigo(codigo);
    if(c1==NULL)
    cout<<"no existe dicho curso o fue eliminado"<<endl;
    else
    {
      Lista<Estudiante> *lis1;
      lis1=uni->devuelveEscuelaDeCursoEncontrado(codigo)->listaEstudiantesDeUnCurso(codigo);
      if(lis1->getPrimero()==NULL)
      cout<<"no se ha asignado ningun Estudiante a este curso"<<endl;
      else
      {
          cout<<"el curso es: "<<endl;
          cout<<c1->toString()<<endl;
          cout<<"y los matruiculados son los siguientes: "<<endl<<endl;
          //lis1->mostrarLista();
          cout<<lis1->toString();

      }
    }
    cin.get();
    cin.get();

}



void Interfaz::estadoDeMatriculaEstudiante()
{
    clean();
    string cedula1;
    cout<<"digite el numero de cedula o carne del estudiante "<<endl;
    cin>>cedula1;
    Estudiante *p1;
    p1=uni->buscarEstudianteCedulaOCarne(cedula1);
    if(p1==NULL)
    cout<<"el estudiante con la identificacion "<<cedula1<<"no pertenece a la universidad"<<endl;
    else
    {
        cout<<p1->toString()<<endl;
        cout<<"esta matriculado en los siguientes cursos: "<<endl;
        //p1->getCursos()->mostrarLista();
        cout<<p1->getCursos()->toString();
    }
    cin.ignore();
    cin.get();
    cin.get();
}

int Interfaz::modificarDatosEstudiante()
{
	clean();
	int estado;
	char check[1];
	int opcion =1;
	string es, cod, input;

	cout<<"Escriba el nombre de la escuela del estudiante: ";
	cin>>input;
	Escuela* esc = uni->getLista()->buscar(input);
	if(esc == NULL)
	{
		cout<<"La escuela "<<input<<" no exite\n";
		cout<<"Presiona enter para continuar...\n";
		cin.ignore();
		cin.get();
		return 0;
	}
	cout<<"Escribe la cedula o carne del estudiante: ";
	cin>>cod;
	Estudiante* est = esc->getEstudiantes()->buscar(cod);
	if(est == NULL)
	{
		cout<<"El estudiante con la cedula o carne "<<cod<<" no existe\n";
		cout<<"Presiona enter para continuar...\n";
		cin.ignore();
		cin.get();
		return 0;
	}
	while(opcion != 5)
	{
		clean();
		cout<<est->toString()<<endl<<endl;
		cout<<"[1] Para cambiar el nombre\n";
		cout<<"[2] Para cambiar el primer apellido\n";
		cout<<"[3] Para cambiar el segundo apellido\n";
		cout<<"[4] Para cambiar la nacionalidad\n";
		cout<<"[5] Para salir\n";
		cout<<"\n-> ";
		cin>>check;
		opcion = compruebaInt(check);
		bool b = false;
		int cant =0;
		string bec;
		switch(opcion)
		{
		case 1:
			cout<<"Escriba el nombre: ";
			cin>>input;
			estado = esc->modificarEstudiante(cod, input, est->getApellido1(), est->getApellido2(), est->getNacionalidad(), false , 0);
			break;
		case 2:
			cout<<"Escriba el primer apellido: ";
			cin>>input;
			estado = esc->modificarEstudiante(cod, est->getNombre(), input, est->getApellido2(), est->getNacionalidad(), false, 0);
			break;
		case 3:
			cout<<"Escriba el segundo apellido: ";
			cin>>input;
			estado = esc->modificarEstudiante(cod, est->getNombre(), est->getApellido1(), input, est->getNacionalidad(), false , 0);
			break;
		case 4:
			cout<<"Escriba la nacionalidad: ";
			cin>>input;
			if(input == "Costarricense" || input == "costarricense")
			{
				cout<<"Es el estudiante becado? (si/otra cosa para no): ";
				cin>>bec;
				if(bec == "si")
				{
					b = true;
					cout<<"Defina el porcentaje de la beca: ";
					cin>>cant;
				}
			}
			estado = esc->modificarEstudiante(cod, est->getNombre(), est->getApellido1(), est->getApellido2(), input, b, cant);
			est = esc->getEstudiantes()->buscar(cod);

			break;
		case 5:
			cout<<"Saliendo...\n";
			break;
		default:
			cout<<"Esa opcion no existe\n";
			break;
		}
		if(estado)
		{
			cout<<"Se ha editado con exito\n";
			cout<<"Presiona enter para continuar...\n";
			cin.ignore();
			cin.get();
		}
		else
		{
			cout<<"No se pudo editar correctamente\n";
			cout<<"Presiona enter para continuar\n";
			cin.ignore();
			cin.get();
		}
	}
	return 1;
}

int Interfaz::calculoAranceles()
{
	string es, cod;
	cout<<"Escriba la escuela del estudiante: ";
	cin>>es;
	Escuela* esc = uni->getLista()->buscar(es);
	if(esc == NULL)
	{
		cout<<"La escuela "<<es<<" no existe\n";
		return 0;
	}
	cout<<"Escriba la cedula o carne del estudiante: ";
	cin>>cod;
	Estudiante* est = esc->getEstudiantes()->buscar(cod);
	if(est == NULL)
	{
		cout<<"El estudiante con el carne o cedula "<<cod<<" no existe\n";
		return 0;
	}
	cout<<esc->toStringArancel(cod);
	cin.ignore();
	cin.get();
	return 1;
}



void Interfaz::menuEstudiantes()
{
     char check[1];
    int opcion=0;
    while(opcion!=9)
    {
    	clean();
        cout<<"\n\t\t\t"<<uni->getNombre()<<endl<<endl;
        cout<<"--------------------MENU DE ESTUDIANTES--------------------\n\n"<<endl;
        cout<<"[1] Para ingresar datos de un estudiante\n"<<endl;
        cout<<"[2] Para mostrar los datos de un estudiante\n"<<endl;
        cout<<"[3] Para modificar los datos de un estudiante\n"<<endl;
        cout<<"[4] Para matricular un estudiante en varios cursos\n"<<endl;
        cout<<"[5] Para modificar la matricula de cursos\n"<<endl;
        cout<<"[6] Para el calculo de aranceles de un estudiante\n"<<endl;
        cout<<"[7] Para mostrar la lista de estudiantes inscritos en un curso\n"<<endl;
        cout<<"[8] Para mostrar la lista cursos de un estudiante\n"<<endl;
        cout<<"[9] para regresar al menu anterior\n"<<endl;
        cout<<"\n-> ";
        cin>>check;
        opcion = compruebaInt(check);
        switch(opcion)
        {
        case 1:
        	matriculaEstudiante();
        	break;

        case 2:
        	mostrarEstudiante();
            break;

        case 3:
            modificarDatosEstudiante();
            break;

        case 4:
        	matriculaVariosCursos();
            break;

        case 5:
            modificacionMatricula();
            break;

        case 6:
        	calculoAranceles();
            break;

        case 7:
            listaEstudiantesDeUnCurso();
            break;

        case 8:
              estadoDeMatriculaEstudiante();
              break;

        case 9:
            cout<<"Regresando al menu anterior...";
            break;



       default:
        	 cout<<"No escogio ninguna opcion, vuelva a escoger\n";
             cout<<"Presiona enter para continuar...\n";
             cin.ignore();
             cin.get();
             break;
        }
    }



}
